package view;

import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import util.Constantes;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;

import language.Strings;

public class ImagemAmpliada extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JLabel lbImagem = null;
	private ChartPanel chartPanel = null;
	private JFreeChart jFreeChart = null;
	
	public ImagemAmpliada() {
		super();
		initialize();
	}

	public ImagemAmpliada(String titulo) {
		super();
		initialize(titulo);
	}
	
	private void initialize() {
		this.setSize(640, 510);
		this.setContentPane(getJContentPane());
		this.setTitle(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		this.setResizable(false);
		this.setDefaultCloseOperation(HIDE_ON_CLOSE);
		this.setLocation(
						((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (this
								.getWidth() / 2)),
						((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this
								.getHeight() / 2)));
	}
	
	private void initialize(String titulo) {
		this.setSize(640, 510);
		this.setContentPane(getJContentPane());
		this.setTitle(titulo);
		this.setResizable(false);
		this.setDefaultCloseOperation(HIDE_ON_CLOSE);
		this.setLocation(
						((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (this
								.getWidth() / 2)),
						((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this
								.getHeight() / 2)));
	}
	
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getLbImagem(), null);
			jContentPane.add(getChartPanel(), null);
		}
		return jContentPane;
	}

	private JLabel getLbImagem(){
		if(lbImagem == null){
			lbImagem = new JLabel();
			lbImagem.setBounds(new Rectangle(0, 0, 640, 480));
		}
		
		lbImagem.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		lbImagem.setHorizontalAlignment(SwingConstants.CENTER);
//		lbImagem.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		lbImagem.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				dispose();
			}
		});		
		
		return lbImagem;
	}
	
	private ChartPanel getChartPanel(){
		if(chartPanel == null){
			chartPanel = new ChartPanel(getjFreeChart());
			chartPanel.setBounds(new Rectangle(0, 0, 640, 480));
		}
		
		chartPanel.addMouseListener(new MouseListener() {
			@Override
			public void mouseClicked(MouseEvent e) {
				dispose();
			}

			@Override
			public void mouseEntered(MouseEvent e) {
				
			}

			@Override
			public void mouseExited(MouseEvent e) {
				
			}

			@Override
			public void mousePressed(MouseEvent e) {
				
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
		});
		
		return chartPanel;
	}
	
	public void setGrafico(String nome, JFreeChart jFreeChart){
		this.setTitle(nome);
		setjFreeChart(jFreeChart);
		getChartPanel().setChart(getjFreeChart());
		
		this.setSize(640, 510);
		lbImagem.setVisible(false);
		lbImagem.setEnabled(false);
		getChartPanel().setVisible(true);
		getChartPanel().setEnabled(true);
	}
		
	public void setImagem(String nome, String tipo, boolean isConsistencia){
		this.setTitle(nome);
		mostraImagem(nome, tipo, isConsistencia);
		
		this.setSize(620, 510);
		lbImagem.setVisible(true);
		lbImagem.setEnabled(true);
		getChartPanel().setVisible(false);
		getChartPanel().setEnabled(false);
	}
	
	private void mostraImagem(String nome, String tipo, boolean isConsistencia){
		File file = null;
		
		if(isConsistencia){
			if(tipo.equalsIgnoreCase("zoom")){
				file = new File(Constantes.DIRETORIO_PERFIL_CONSISTENCIA_IMAGENS_ZOOM, nome + Constantes.EXTENSAO_JPG);
			} else if(tipo.equalsIgnoreCase("pan1")){
				file = new File(Constantes.DIRETORIO_PERFIL_CONSISTENCIA_IMAGENS_PAN_1, nome + Constantes.EXTENSAO_JPG);
			} else if(tipo.equalsIgnoreCase("pan2")){
				file = new File(Constantes.DIRETORIO_PERFIL_CONSISTENCIA_IMAGENS_PAN_2, nome + Constantes.EXTENSAO_JPG);
			} 
		} else{
			if(tipo.equalsIgnoreCase("zoom")){
				file = new File(Constantes.DIRETORIO_PERFIL_ESTATISTICA_IMAGENS_ZOOM, nome + Constantes.EXTENSAO_JPG);
			} else if(tipo.equalsIgnoreCase("pan1")){
				file = new File(Constantes.DIRETORIO_PERFIL_ESTATISTICA_IMAGENS_PAN_1, nome + Constantes.EXTENSAO_JPG);
			} else if(tipo.equalsIgnoreCase("pan2")){
				file = new File(Constantes.DIRETORIO_PERFIL_ESTATISTICA_IMAGENS_PAN_2, nome + Constantes.EXTENSAO_JPG);
			}
		}
		
		if(file.exists()){
			String pathImagem = file.getAbsolutePath();
			
			ImageIcon icon = new ImageIcon(pathImagem);
			Image image = icon.getImage().getScaledInstance(640, 480, Image.SCALE_AREA_AVERAGING);
			icon = new ImageIcon(image);
			
			getLbImagem().setIcon(icon);
		} else{
			getLbImagem().setIcon(null);
			getLbImagem().setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		}	
	}
	
	public void setjFreeChart(JFreeChart jFreeChart) {
		this.jFreeChart = jFreeChart;
	}
	
	public JFreeChart getjFreeChart() {
		return jFreeChart;
	}
} 
